#!/bin/bash
#
# 代码更新脚本
# 用于更新生产环境的代码
#

set -e

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}  股票分析后端 - 代码更新脚本${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""

# 配置
APP_DIR="/home/stock-backend"
APP_USER="stock-backend"
SERVICE_NAME="stock-backend"

# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then 
    echo -e "${RED}请使用root权限运行此脚本: sudo ./update_code.sh${NC}"
    exit 1
fi

# 检查生产目录是否存在
if [ ! -d "$APP_DIR" ]; then
    echo -e "${RED}生产目录 $APP_DIR 不存在！${NC}"
    echo -e "${YELLOW}请先运行部署脚本: sudo ./deploy.sh${NC}"
    exit 1
fi

# 获取当前脚本目录（开发目录）
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

echo -e "${YELLOW}开发目录: $SCRIPT_DIR${NC}"
echo -e "${YELLOW}生产目录: $APP_DIR${NC}"
echo ""

# 询问更新方式
echo "请选择更新方式:"
echo "1) 完整更新（停止服务 → 复制代码 → 重启服务）"
echo "2) 仅复制代码（不重启服务）"
echo "3) 仅重启服务（不更新代码）"
read -p "请输入选项 [1-3]: " UPDATE_MODE

case $UPDATE_MODE in
    1)
        echo -e "${GREEN}[1/4] 停止服务...${NC}"
        systemctl stop $SERVICE_NAME
        
        echo -e "${GREEN}[2/4] 备份当前代码...${NC}"
        cp -r $APP_DIR $APP_DIR.backup.$(date +%Y%m%d_%H%M%S)
        
        echo -e "${GREEN}[3/4] 更新代码...${NC}"
        cp -r "$SCRIPT_DIR"/* $APP_DIR/
        chown -R $APP_USER:$APP_USER $APP_DIR
        
        echo -e "${GREEN}[4/4] 重启服务...${NC}"
        systemctl start $SERVICE_NAME
        
        echo -e "${GREEN}✅ 代码更新完成！${NC}"
        ;;
    2)
        echo -e "${GREEN}[1/2] 更新代码...${NC}"
        cp -r "$SCRIPT_DIR"/* $APP_DIR/
        chown -R $APP_USER:$APP_USER $APP_DIR
        
        echo -e "${GREEN}[2/2] 代码更新完成（服务未重启）${NC}"
        echo -e "${YELLOW}提示: 如需应用更改，请手动重启服务: sudo systemctl restart $SERVICE_NAME${NC}"
        ;;
    3)
        echo -e "${GREEN}[1/1] 重启服务...${NC}"
        systemctl restart $SERVICE_NAME
        
        echo -e "${GREEN}✅ 服务重启完成！${NC}"
        ;;
    *)
        echo -e "${RED}无效选项${NC}"
        exit 1
        ;;
esac

# 检查服务状态
echo ""
echo -e "${GREEN}检查服务状态...${NC}"
systemctl status $SERVICE_NAME --no-pager

echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}  更新完成！${NC}"
echo -e "${GREEN}========================================${NC}"

